/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.unesp.demac.bcc.soo.dao;

import br.unesp.demac.bcc.soo.bean.Modalidade;
import br.unesp.demac.bcc.soo.util.FabricaConexao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 *
 * @author flavioam
 */
public class ModalidadeDAOImp implements ModalidadeDAO {

    @Override
    public boolean salvaModalidade(Modalidade m) throws Exception {

        boolean saved = false;
        Connection con = null;

        try {

            con = FabricaConexao.getConexao();

            String sql = "insert into Modalidades (nome, valorAluguel,diasDevolucao) values (?,?,?)";

            PreparedStatement pstmt = con.prepareStatement(sql);

            pstmt.setString(1, m.getNome());
            pstmt.setDouble(2, m.getValorAluguel());
            pstmt.setInt(3, m.getDiasDevolucao());

            pstmt.executeUpdate();

            saved = true;

        } catch (SQLException e) {

            throw new Exception("Erro ao salvar modalidade: " + e.getMessage());

        } finally {
            FabricaConexao.fechar(con);
        }
        return saved;
    }

    @Override
    public Modalidade selecionaModalidadeById(int id) throws Exception {

        Modalidade m = null;
        Connection con = null;

        try {

            con = FabricaConexao.getConexao();

            String sql = "select * from Modalidades where idModalidades = ?";

            PreparedStatement pstmt = con.prepareStatement(sql);

            pstmt.setInt(1, id);

            ResultSet rs = pstmt.executeQuery();

            if (rs.next()) {

                m = new Modalidade();
                m.setDiasDevolucao(rs.getInt("diasDevolucao"));
                m.setIdModalidade(id);
                m.setNome(rs.getString("nome"));
                m.setValorAluguel(rs.getDouble("valorAluguel"));
            }

        } catch (SQLException e) {

            throw new Exception("Erro ao selecionar modalidade: " + e.getMessage());

        } finally {
            FabricaConexao.fechar(con);
        }
        return m;

    }

    @Override
    public ArrayList<Modalidade> selecionaTodasModalidades() throws Exception {

        ArrayList<Modalidade> l = new ArrayList<Modalidade>();
        Connection con = null;

        try {

            con = FabricaConexao.getConexao();

            String sql = "select * from Modalidades";

            PreparedStatement pstmt = con.prepareStatement(sql);

            ResultSet rs = pstmt.executeQuery();

            while (rs.next()) {

                Modalidade m = new Modalidade();

                m.setDiasDevolucao(rs.getInt("diasDevolucao"));
                m.setIdModalidade(rs.getInt("idModalidades"));
                m.setNome(rs.getString("nome"));
                m.setValorAluguel(rs.getDouble("valorAluguel"));

                l.add(m);
            }

        } catch (SQLException e) {

            throw new Exception("Erro ao selecionar modalidades: " + e.getMessage());

        } finally {
            FabricaConexao.fechar(con);
        }
        return l;
    }

    @Override
    public boolean deletaModalidade(Modalidade m) throws Exception {

        boolean updated = false;
        Connection con = null;

        try {

            con = FabricaConexao.getConexao();

            String sql = "delete from Modalidades where idModalidades = ?";

            PreparedStatement pstmt = con.prepareStatement(sql);

            pstmt.setInt(1, m.getIdModalidade());

            pstmt.executeUpdate();

            updated = true;

        } catch (SQLException e) {

            throw new Exception("Erro ao deletar modalidade: " + e.getMessage());

        } finally {
            FabricaConexao.fechar(con);
        }
        return updated;
    }

    @Override
    public boolean editaModalidade(Modalidade m) throws Exception {

        boolean updated = false;
        Connection con = null;

        try {

            con = FabricaConexao.getConexao();

            String sql = "update Modalidades set valorAluguel = ?, diasDevolucao = ? where idModalidades = ?";

            PreparedStatement pstmt = con.prepareStatement(sql);

            pstmt.setDouble(1, m.getValorAluguel());
            pstmt.setInt(2, m.getDiasDevolucao());
            pstmt.setInt(3, m.getIdModalidade());

            pstmt.executeUpdate();

            updated = true;

        } catch (SQLException e) {

            throw new Exception("Erro ao editar modalidade: " + e.getMessage());

        } finally {
            FabricaConexao.fechar(con);
        }
        return updated;
    }
}
